package com.swcw.platform.utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import com.swcw.platform.constants.OwnConstant;

/**
 * FTP上传文件工具类
 * 
 * @see:
 * @Company:江苏鸿信系统集成有限公司微信开发组
 * @author 杨坚
 * @Time 2016年10月3日
 * @version 1.0v
 */
public class FileTool {
	/**
	 * 使用FPT上传文件至远程服务器
	 * 
	 * @param url
	 *            FTP服务器ip
	 * @param port
	 *            FTP服务器端口 21
	 * @param username
	 *            FTP登录账号
	 * @param password
	 *            FTP登录密码
	 * @param path
	 *            FTP服务器保存目录
	 * @param filename
	 *            上传到FTP服务器上的文件名
	 * @param input
	 *            文件流
	 * @return 成功返回true，否则返回false
	 */
	public static boolean FtpUpload(String url, int port, String username, String password, String path,
			String filename, FileInputStream input) {
		// 返回值
		boolean success = false;
		FTPClient ftp = new FTPClient();
		// 设置字符集
		ftp.setControlEncoding(OwnConstant.FTP_CHARSETNAME);
		try {
			int reply;
			ftp.connect(url, port);// 连接FTP服务器
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			// 验证是否正常登录 230状态登录成功
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			// 传输文件类型为二进制
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
			// 切换地址 true为路径存在 否则不存在
			if (!ftp.changeWorkingDirectory(path)) {
				// 创建路径
				if (ftp.makeDirectory(path)) {
					// 切换路径
					ftp.changeWorkingDirectory(path);
				}
			}
			Properties props = System.getProperties(); // 系统属性
			// window系统为主动模式 Linux系统为被动模式
			if (!props.getProperty("os.name").toLowerCase().contains("WINDOWS")) {
				ftp.enterLocalPassiveMode();
			}
			// 传输文件
			ftp.storeFile(filename, input);
			// 关闭流
			input.close();
			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}

	// 测试
	public static void main(String[] args) {
		// try {
		// boolean flag = false;
		// // 读取文件流
		// FileInputStream input = new FileInputStream(new File("F:/logo.jpg"));
		// // ------------> 上传目录必须是拼接好的字符串，推荐所有文件包括文件夹不使用中文
		// flag = FtpUpload("180.97.31.118", 21, "micxp", "123123",
		// "/home/micxp/upload/2016-12-06", "7.jpg", input);
		// System.out.println("================>返回状态:" + flag);
		// } catch (Exception e) {
		// e.printStackTrace();
		// }
	}

}